Muestra el error json en cartero como se esperaba, pero luego se bloqueó.
DB conectado POST /api/signup 200 84.443 ms - 27 events.js:377 throw er; // Evento 'error' no manejado ^
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client at new NodeError (internal/errors.js:322:7) at ServerResponse.setHeader (_http_outgoing.js:561:11) at ServerResponse.header (/home/aman/Projects/Discover/discover_blog/backend/node_modules/express/lib/response.js:794:10) at ServerResponse.send (/home/aman/Projects/Discover/discover_blog/backend/node_modules/express/lib/response.js:174:12) at ServerResponse.json (/home/aman/Projects/Discover/discover_blog/backend/node_modules/express/lib/response.js:278:15) at /home/aman/Projects/Discover/discover_blog/backend/controllers/auth.js:22:30 at /home/aman/Projects/Discover/discover_blog/backend/node_modules/mongoose/lib/model.js:5004:18 at processTicksAndRejections (internal/process/task_queues.js:77:11)Evento de 'error' emitido en la instancia de la función en: en /home/aman/Projects/Discover/discover_blog/backend/node_modules/mongoose/lib/model.js:5006:15 en processTicksAndRejections (internal/process/task_queues.js:77: 11) { código: 'ERR_HTTP_HEADERS_SENT' }
// const User = require("../models/user"); const shortId = require("shortid"); // const signup = (req, res) => { const { name, email, password } = req.body; User.findOne({ email: email }).exec((err, user) => { if (user) { return res.status(400).json({ error: "Email is taken ", }); } }); let username = shortId.generate(); let profile = `${process.env.CLIENT_URL}/profile/${username}`; let newUser = new User({ name, email, password, profile, username }); newUser.save((err, user) => { if (err) { return res.status(400).json({ error: err, }); } return res.json({ message: "Signup is successfull! Please signin", user: user, }); }); }; module.exports = { signup };Está ejecutando newUser.save demasiado pronto: debe esperar hasta que finalice .findOne ; de lo contrario, ambos enviarán el estado 400 inicial (que se tomó el correo electrónico) y luego uno con los resultados del registro. También recomendaría no ignorar el posible error .findOne .
const signup = (req, res) => { const { name, email, password } = req.body; User.findOne({ email: email }).exec((err, user) => { if (err) { return res.status(400).json({ error: err, }); } if (user) { return res.status(400).json({ error: "Email is taken ", }); } const username = shortId.generate(); const profile = `${process.env.CLIENT_URL}/profile/${username}`; const newUser = new User({ name, email, password, profile, username }); newUser.save((err, user) => { if (err) { return res.status(400).json({ error: err, }); } return res.json({ message: "Signup is successfull! Please signin", user: user, }); }); }); };